// 此模块为爬虫功能函数

const pt = require('puppeteer');

module.exports = async function (options) {
  // options 爬取数据的配置项 
	try {
    // 开启一个浏览器
    const bs = await pt.launch({
      // 开启浏览器的配置项
        //headless: false,
        args: ['--no-sandbox', '--disable-setuid-sandbox'], //沙盒 沙箱
        handleSIGINT: false,
        ignoreDefaultArgs: ['--disable-extensions'],
        executablePath: '/root/.chromium-browser-snapshots/linux-722234/chrome-linux/chrome',
      }),
      // 创建一个页面对象
      pg = await bs.newPage(),
      url = options.url;

    // 页面打开的地址
    await pg.goto(url, {
      // 等待的状态
      waitUtil: 'networkidle2',
      timeout: 0,
    });

    // 去分析页面
    // slider爬虫脚本options.callback
    // result: [[ cid: 'xx', imgUrl: 'xx' }]]
    let result = await pg.evaluate(options.callback);

    if (result && options.field === 'course') {
      await pg.waitForSelector('.page-btn.page-last');
      await pg.click('.page-btn.page-last');
      await pg.waitFor(2000);
      const res = await pg.evaluate(options.callback);
      await pg.waitFor(2000);
      for (var i = 0; i < res.length; i++) {
        await result.push(res[i]);
      }
    }
    // 关闭页面
    await bs.close();

    	// 子进程将结果发送出去
			// 将子进程 数据 发送给主进程（utils/startProcess()方法）
    process.send(result);

    // 延时关闭进程
    setTimeout(() => {
      process.exit(0);
    }, 1000);
  } catch (err) {
    console.log(err);
	}
}